今天來討論 maintenance mode 的實踐,我們 maintenance mode 基本的概念是調整 ALB 的 rule。並將他轉導到 503 response。為了做到這件事情,我們將他的設定架構在 IaC 的流程上,並在 terraform 設定上新增開關
module "maintenance_mode" {
enabled_maintenance_mode = var.enabled_maintenance_mode #each.value.enabled
}
# ALB
resource "aws_lb_listener_rule" "maintenance_on_allow_whitelist" {
count = var.enabled_maintenance_mode ? local.num_allow_cidrs : 0
action {
type = "forward"
target_group_arn = data.aws_lb_target_group.selected.arn
}
}
resource "aws_lb_listener_rule" "maintenance_on_response_503" {
count = var.enabled_maintenance_mode ? 1 : 0
priority = 1 + var.num_target_groups + var.num_target_groups * local.num_allow_cidrs + var.target_group_index
action {
type = "fixed-response"
fixed_response {
content_type = "application/json"
message_body = "maintenance mode is enabled."
status_code = "503"
}
}
}
當今天要進入 Maintenance mode,我們會將 terraform 的 module maintenance mode on,並部署。這時 ALB rule 就會快樂切換成對應的 response 了。但我們後來遇到了一個大問題,因為 ALB 其實是 eks ingress 建立的,ingress 會自動將他設定回原本的設定值!所以每次我們部署完,其實 EKS 會自動調整回來!那要如何調整呢?我們後來決定往上一層,從 ingress 進行修改。